package com.xdja.zuoye

import java.lang.Exception

//给定数组 {-4, 1, 2, 2, 5, 5, 5, 8, 10}, 使用二分查找， 找到 小于等于 t的最后一个数 ， 假定t = 6.

fun main() {
    var array = arrayOf(-4, 1, 2, 2, 5, 5, 5, 8, 10)
    print(array.chazhao1(5))
}

fun Array<Int>.chazhao1(value: Int): String {
    var start = 0
    var end = this.size - 1
    while (end > start) {
        var middle = (end - start) / 2 + start
        if (this[middle] > value) {//大了 ，往左找
            if (middle - 1 >= 0 && this[middle - 1] <= value) {//上个值小于等于value，这就是最后一个小于等于value的值
                return "第${middle}个数${this[middle - 1]}为小于等于${value}的最后一个数"
            } else if (middle - 1 >= 0) {//上个值大于value且大于等于0，继续查找左边
                end = middle - 1
            } else {//上个值下标小于0
                throw Exception("no num found")
            }
        } else {
            if (middle + 1 < this.size && this[middle + 1] <= value) {
                start = middle + 1
            } else if (middle + 1 < this.size) {
                return "第${middle + 1}个数${this[middle]}为小于等于${value}的最后一个数"
            } else {
                return "最后一个数${this.last()}为小于等于${value}的最后一个数"
            }
        }
    }
    if (start == end && this[start] <= value) {
        return "第${start + 1}个数${this[start]}为小于等于${value}的最后一个数"
    }
    return "没有小于或等于${value}的数"
}
